﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Gustozzi.DAL;
using Gustozzi.BL;

namespace WebGustozzi.ModuloVentas
{
    public partial class wfActualizarCliente : System.Web.UI.Page
    {
        #region "variables"
        VentasDataEntities contexto = null;
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                inicializar();
            }
        }

        protected void imbCerrar_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("../wfPrincipal.aspx");
        }

        public void inicializar()
        {
            EditarControles(false);
            if(contexto ==null)
            {
                contexto=new VentasDataEntities();
            }
            var listaTipoCliente = from tipo in contexto.TiposCliente                                    
                                   select new {Codigo=tipo.codigoTipoCliente,
                                               Nombre=tipo.descripcion};
            ddlTipoCliente.DataSource = listaTipoCliente;
            ddlTipoCliente.DataTextField = "Nombre";
            ddlTipoCliente.DataValueField = "Codigo";
            ddlTipoCliente.DataBind();

        }

        public void EditarControles(Boolean estado)
        {
            this.txtCodCliente.Enabled  = estado;
            this.ddlTipoCliente.Enabled = estado;
            this.ddlTipoPersona.Enabled = estado;
            this.txtNroDoc.Enabled = estado;
            this.txtNombre.Enabled = estado;
            this.txtApellidoPaterno.Enabled = estado;
            this.txtApellidoMaterno.Enabled = estado;
            this.txtCorreo.Enabled = estado;
            this.txtTelefono.Enabled = estado;
            this.txtPersonaContacto.Enabled = estado;
            this.txtTelefonoContacto.Enabled = estado;
            this.imbBuscarCliente.Enabled = estado;
            this.btnAgregarDireccion.Enabled = estado;
        }

        public void LimpiarControles()
        {
            this.txtCodCliente.Text  = "";
            this.txtNroDoc.Text = "";
            this.txtNombre.Text = "";
            this.txtApellidoPaterno.Text = "";
            this.txtApellidoMaterno.Text = "";
            this.txtCorreo.Text = "";
            this.txtTelefono.Text = "";
            this.txtPersonaContacto.Text = "";
            this.txtTelefonoContacto.Text = "";
        }

        protected void Button1_Click(object sender, EventArgs e)
        {

        }



        protected void txtCodigoCliente_TextChanged(object sender, EventArgs e)
        {
            try
            {
                BuscarCliente();
                ConsultarDirecciones();
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public void BuscarCliente() 
        {
            int idCliente =0;
            if(!txtCodCliente.Text.Trim().Equals(string.Empty)) 
            {
                idCliente = Convert.ToInt32(txtCodCliente.Text.Trim());

                if (contexto == null)
                {
                    contexto = new VentasDataEntities();
                }

                var lstCliente = (from c in contexto.Clientes
                                             where c.codigoCliente == idCliente
                                             select c).ToList();

                Cliente oCliente =null;

                if (lstCliente != null) 
                {
                    if (lstCliente.Count > 0) 
                    {
                        oCliente = (Cliente)lstCliente.First();
                    }                    
                }

                if (oCliente != null)
                {
                    txtNombre.Text = oCliente.nombreCliente;
                    txtApellidoPaterno.Text = oCliente.apellidoPaternoCliente;
                    txtApellidoMaterno.Text = oCliente.apellidoMaternoCliente;
                    txtCorreo.Text = oCliente.emailContacto;
                    txtNroDoc.Text = oCliente.numeroDocumento;
                    txtTelefono.Text = oCliente.telefono;
                    txtTelefonoContacto.Text = oCliente.telefonoContacto;
                    txtPersonaContacto.Text = oCliente.nombreContacto;
                    ddlTipoCliente.SelectedValue = oCliente.codigoTipoCliente.ToString();
                    ddlTipoPersona.SelectedValue = oCliente.tipoPersona;
                }
            }
           
        }
        public void ConsultarDirecciones()
        {
            if (contexto == null)
            {
                contexto = new VentasDataEntities();
            }
            int codCliente = Convert.ToInt32(txtCodCliente.Text);
            var lstDirecciones = from oDireccion in contexto.ClienteDirecciones
                                 where oDireccion.codigoCliente == codCliente && oDireccion.estado=="A"
                                     select oDireccion;
           

            grvDireccion.DataSource = lstDirecciones;
            grvDireccion.DataBind();

            if (lstDirecciones != null)
            {
                Session["listaDirecciones"] = lstDirecciones.ToList();
            }
        }
        public void MostrarDirecciones() 
        {
            var listado = Session["listaDirecciones"];
            List<ClienteDireccion> lstDirecciones = null;
            if (listado != null) 
            {
                lstDirecciones = (List<ClienteDireccion>)listado;
            }
            
            grvDireccion.DataSource = lstDirecciones;
            grvDireccion.DataBind();
            
        }

        protected void grvDireccion_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (contexto == null) 
            {
                contexto = new VentasDataEntities(); 
            }
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int idDireccion=Convert.ToInt32(e.Row.Cells[1].Text);

                var direccion = (from p in contexto.ClienteDirecciones.Include("Departamento,Provincia,Distrito")
                                 where p.codigoDireccion == idDireccion
                                 select new 
                                 {
                                     nombreDpto=p.Departamento.nombreDpto,
                                     nombreProvincia=p.Provincia.nombreProvincia,
                                     nombreDistrito=p.Distrito.nombreDistrito 
                                 });
                if (direccion != null) 
                {
                    if (direccion.Count() != 0)
                    {
                        var oDireccion = direccion.First();
                        e.Row.Cells[3].Text = oDireccion.nombreDpto;
                        e.Row.Cells[4].Text = oDireccion.nombreProvincia;
                        e.Row.Cells[5].Text = oDireccion.nombreDistrito;
                    }
                    else 
                    {
                        var listado = Session["listaDirecciones"];
                        List<ClienteDireccion> lstDirecciones = null;
                        if (listado != null)
                        {
                            lstDirecciones = (List<ClienteDireccion>)listado;
                            int idDistrito = lstDirecciones[e.Row.DataItemIndex].codigoDistrito;
                            int idProvincia = lstDirecciones[e.Row.DataItemIndex].codigoProvincia;
                            int idDepartamento = lstDirecciones[e.Row.DataItemIndex].codigoDistrito;
                            var oDist = (from p in contexto.Distritos.Include("Provincia,Departamento")
                                        where p.codigoDistrito == idDistrito && p.codigoProvincia == idProvincia
                                        && p.codigoDpto == idDepartamento
                                        select new 
                                        {
                                            NombreDistrito=p.nombreDistrito,
                                            NombreProvincia=p.Provincia.nombreProvincia,
                                            NombreDepartamento=p.Provincia.Departamento.nombreDpto
                                        }).First();


                            e.Row.Cells[3].Text = oDist.NombreDepartamento;
                            e.Row.Cells[4].Text = oDist.NombreProvincia;
                            e.Row.Cells[5].Text = oDist.NombreDistrito;
                           
                        }
                    }
                }

            }

        }

        protected void hdfNumDirecciones_ValueChanged(object sender, EventArgs e)
        {
            MostrarDirecciones();
        }

        protected void grvDireccion_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

       
        protected void imbGuardarCliente_Click(object sender, EventArgs e)
        {

            try
            {
                Guardar();
            }
            catch (Exception)
            {

                throw;
            }
        }
        public void Guardar()
        {
            ClienteBL oClienteBL = new ClienteBL();
            Cliente oCliente = new Cliente();

            if (txtCodCliente.Text.ToString().Equals(string.Empty))
            {
                throw new Exception("No se ha asignado código al cliente");
            }

            if (ddlTipoCliente.SelectedIndex <= 0)
            {
                throw new Exception("No se ha seleccionado el tipo de cliente");
            }

            if (ddlTipoPersona.SelectedIndex <= 0)
            {
                throw new Exception("No se ha seleccionado el tipo de persona");
            }

            int idCliente = Convert.ToInt32(txtCodCliente.Text.Trim());
            int tipoCliente = Convert.ToInt32(ddlTipoCliente.SelectedValue);
            string tipoPersona = ddlTipoPersona.SelectedValue;
            string numeroDocumento = txtNroDoc.Text;
            string nombres = txtNombre.Text;
            string apellidoPaterno = txtApellidoPaterno.Text;
            string apellidoMaterno = txtApellidoMaterno.Text;
            string correo = txtCorreo.Text;
            string telefono = txtTelefono.Text;
            string contacto = txtPersonaContacto.Text;
            string telefonoContacto = txtTelefonoContacto.Text;

            VentasDataEntities contexto=new VentasDataEntities();

            var lstClientes = (from c in contexto.Clientes
                               where c.codigoCliente==idCliente 
                               select c);

            if (lstClientes.Count() > 0)
            {
                oCliente = lstClientes.First();
            }
            else 
            {
                oCliente = new Cliente();
                contexto.AddToClientes(oCliente);
            }

            oCliente.codigoCliente = idCliente;
            oCliente.codigoTipoCliente = tipoCliente;
            oCliente.tipoPersona = tipoPersona;
            oCliente.numeroDocumento = numeroDocumento;
            oCliente.nombreCliente = nombres;
            oCliente.apellidoPaternoCliente = apellidoPaterno;
            oCliente.apellidoMaternoCliente = apellidoMaterno;
            oCliente.emailContacto = correo;
            oCliente.telefono = telefono;
            oCliente.nombreContacto = contacto;
            oCliente.telefono = telefonoContacto;
            oCliente.estado = "1";

            var listado = Session["listaDirecciones"];
            List<ClienteDireccion> lstDirecciones = null;
            if (listado != null)
            {
                lstDirecciones = (List<ClienteDireccion>)listado;
                /*
                foreach (var item in lstDirecciones)
                {                    
                   item.codigoCliente = idCliente;
                }*/
            }

           int rpta= oClienteBL.ActualizarCliente(oCliente, lstDirecciones, contexto );

           EditarControles(false);
           divRegistrar.Visible = false;
           divControlesManten.Visible = true;
        }

         public void GenerarCodigoCliente() 
         {
             if (contexto == null) 
             {
                 contexto = new VentasDataEntities();
             }
             int codigoCliente = (from p in contexto.Clientes
                                  select p.codigoCliente).Max();
             codigoCliente += 1;
             txtCodCliente.Text = codigoCliente.ToString();

         }
         protected void imbNuevo_Click(object sender, ImageClickEventArgs e)
         {
             EditarControles(true);
             divRegistrar.Visible = true;
             divControlesManten.Visible = false;

             try
             {
                 GenerarCodigoCliente();
             }
             catch (Exception)
             {
                 
                 throw;
             }
         }

         protected void imbCancelar_Click(object sender, EventArgs e)
         {
             LimpiarControles();
             EditarControles(false);
             divRegistrar.Visible = false;
             divControlesManten.Visible = true;
         }

         protected void imbEliminar_Click(object sender, ImageClickEventArgs e)
         {
             Response.Write("<script>alert('Opción eliminar en construcción')</script>");
         }
    }
}